package cn.wangjie.spark.operations.partitioner

import org.apache.spark.Partitioner

/**
 * 自定义分区器，实现RDD分区，在进行Shuffle过程中
 */
class UpperLowerCasePartitioner extends Partitioner {
  // 确定分区数目
  override def numPartitions: Int = 3
	
	// 依据Key，确定所属分区，返回值：0,...,2
	override def getPartition(key: Any): Int = {
		// 获取每个单词第一个字符
		val firstChar: Int = key.asInstanceOf[String].charAt(0).toInt
		
		if(firstChar >= 97 && firstChar <= 122){
			 0  // 小写字母开头单词，在第一个分区
		}else if(firstChar >= 65 && firstChar <= 90){
			 1 // 大写字母开头单词，在第二个分区
		}else{
			 2 // 非大小字母开头单词，在第三个分区
		}
	}
}
